package com.violet.redis.anno;


import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;

/**
 * 类说明: redis 缓存注解-获取缓存数据，如果存在则直接返回，否则执行业务查询方法
 * 使用场景：多用于查询数据，先取缓存，缓存没有数据再取业务方法查询数据库，减少对数据库的访问
 * 为了避免缓存穿透，有时候查询数据库也没数据时，可以再缓存中缓存一个空值
 * 在方法开始前和结束后判断
 * @author wqf
 * @date 2023/7/20 11:34
 */
@Target({ElementType.TYPE,ElementType.FIELD,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface CacheGet {
    /**
     * 缓存key前缀
     */
    String keyPrefix() default "";

    /**
     * 缓存key拼接的value
     */
    String keyValue() default "";

    /**
     * 缓存条件判断，如返回数据为null时不进行缓存
     */
    String condition() default "";

    /**
     * 过期时间 默认单位秒
     */
    long expire() default 1;

    /**
     * 缓存时间单位
     */
    TimeUnit timeUnit() default TimeUnit.SECONDS;
}

